/**
给定二叉树根结点 root ，此外树的每个结点的值要么是 0，要么是 1。

返回移除了所有不包含 1 的子树的原二叉树。

( 节点 X 的子树为 X 本身，以及所有 X 的后代。)

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/binary-tree-pruning
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。


 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* pruneTreeHelper(TreeNode* node)
    {
        if(node == 0)
            return 0;
        node->left = pruneTreeHelper(node->left);
        node->right= pruneTreeHelper(node->right);

        if(node->left == 0 && node->right == 0 && node->val == 0 )
        {         
            //delete node;  
            return 0; 
        }
        return node;
    }
    TreeNode* pruneTree(TreeNode* root) {
        root = pruneTreeHelper(root);
        return root;
    }
};